/**
 * 异步回调API的封装-------精华
 */
var fs=require('fs')
/**
 * 查找所有学生功能
 */
exports.find=function(callback){
    fs.readFile('./db.json',function(err,data){
        if(err){
            callback(err)
        }else{
            data=data.toString()
            callback(null,JSON.parse(data).students)
        }
    })
}
/**
 * 根据ID查找学生功能
 */
exports.findById=function(id,callback){
    fs.readFile('./db.json',function(err,data){
        if(err){
            return callback(err)
        }
        // console.log(id===4)
        data=data.toString()
        var students=JSON.parse(data).students
        var stu=students.find(function(item){
            return item.id==id
        })
        // console.log(students)
        // console.log(stu)
        callback(null,stu)
    })
}
/**
 * 保存学生信息功能
 */
exports.save=function(student,callback){
    fs.readFile('./db.json',function(err,data){
        if(err){
            return callback(err)
        }else{
            // console.log(student)
            var data=data.toString()
            
            var students=JSON.parse(data).students
            student.id=students[students.length-1].id+1
            // console.log(student)
            students.push(student)
            students=JSON.stringify({"students":students})
            fs.writeFile('./db.json',students,function(err){
                if(err){
                    callback(err)
                }
                // fs.readFile('./db.json',function(err,data){  var data=data.toString()
            
                //     var students=JSON.parse(data).students ;console.log(students) })
                callback(null)
            })
        }
    })
}
/**
 * 更新学生
 */
exports.updateById=function(student,callback){
    fs.readFile('./db.json',function(err,data){
        if(err){
            return callback(err)
        }
        // console.log(student)
        data=data.toString()
        // console.log(student)
        student.id=parseInt(student.id)
        var students=JSON.parse(data).students
        var stu=students.find(function(item){
            return item.id==student.id
        })
        console.log(student)
        //这个是直接在students对象中修改数据
        for(var key in stu){
            stu[key]=student[key]
        }
        var fileData=JSON.stringify({"students":students})
        fs.writeFile('./db.json',fileData,function(err){
            if(err){
                callback(err)
            }
            callback(null)
        })
    })
}

/**
 * 
 * @param {*} id 
 * @param {*} callback
 * 删除功能 
 */
exports.deleteById = function (id, callback) {
    fs.readFile('./db.json', function (err, data) {
      if (err) {
        return callback(err)
      }
      data=data.toString()
      var students = JSON.parse(data).students
  
      // findIndex 方法专门用来根据条件查找元素的下标
      var deleteId = students.findIndex(function (item) {
        return item.id === parseInt(id)
      })
  
      // 根据下标从数组中删除对应的学生对象
      students.splice(deleteId, 1)
  
      // 把对象数据转换为字符串
      var fileData = JSON.stringify({
        students: students
      })
  
      // 把字符串保存到文件中
      fs.writeFile('./db.json', fileData, function (err) {
        if (err) {
          // 错误就是把错误对象传递给它
          return callback(err)
        }
        // 成功就没错，所以错误对象是 null
        callback(null)
      })
    })
  }
  